package dao

import (
	"github.com/jinzhu/gorm"
	"pojo/model"
	"pojo/form"
)

// 广告需要访问数据库
type AdvDao struct {
	db *gorm.DB
}

// 构造一个广告访问数据库的对象
func NewAdvDao(db *gorm.DB) *AdvDao {
	// 返回一个对象
	return &AdvDao{
		db: db,
	}
}

// 更新 广告信息
func (this *AdvDao) UpdateAdv(adv *model.Adv) error {

	result := this.db.Save(adv)
	// 返回错误结果
	return result.Error
}

// 删除 广告
func (this *AdvDao) Delete(id uint64) error {

	result := this.db.Delete(model.Adv{}, "id = ?", id)

	// 返回错误结果
	return result.Error
}

func (this *AdvDao) InsertAdv(adv *model.Adv) (int64, error) {

	// 往数据库插入广告信息  返回一个结果
	result := this.db.Save(adv)

	// 正确的话 返回正确条数
	return result.RowsAffected, result.Error
}

// 统计广告条数
func (this *AdvDao) Count(form *form.AdvPageQueryForm) (uint64, error) {

	var count uint64

	// 执行数据库查询
	result := this.db.Model(model.Adv{}).Count(&count)

	return count, result.Error
}

// 分页查询广告
func (this *AdvDao) List(form *form.AdvPageQueryForm) ([]*model.Adv, error) {

	advs := make([]*model.Adv, 0)
	// 计算偏移量
	offset := (form.Page - 1) * form.Limit
	// 执行查询
	result := this.db.Limit(form.Limit).Offset(offset).Find(&advs)

	// 返回错误结果
	return advs, result.Error
}

// 根据id查询广告
func (this *AdvDao) FindAdv(id uint64) (*model.Adv, error) {

	adv := &model.Adv{}

	result := this.db.Where("id = ?", id).Find(adv)

	return adv, result.Error
}
